package com.zzyl.service.impl;

import cn.hutool.core.date.LocalDateTimeUtil;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.zzyl.base.PageBean;
import com.zzyl.dto.AlertDataHandleDto;
import com.zzyl.dto.AlertDataPageQueryDto;
import com.zzyl.entity.AlertData;
import com.zzyl.entity.User;
import com.zzyl.mapper.AlertDataMapper;
import com.zzyl.mapper.UserMapper;
import com.zzyl.service.AlertDataService;
import com.zzyl.utils.ThreadLocalUtil;
import com.zzyl.vo.AlertDataVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;

@Slf4j
@Service
public class AlertDataServiceImpl implements AlertDataService {


    @Autowired
    private AlertDataMapper alertDataMapper;
    @Autowired
    private UserMapper userMapper;

    /**
     * 管理端分页查询报警数据
     *
     * @param alertDataPageQueryDto 报警数据分页查询请求
     * @return 报警数据
     */
    @Override
    public PageBean<AlertDataVo> adminPageQuery(AlertDataPageQueryDto alertDataPageQueryDto) {
        // 获取当前的用户
        Long userId = ThreadLocalUtil.get();

        PageHelper.startPage(alertDataPageQueryDto.getPageNum(), alertDataPageQueryDto.getPageSize());
        LocalDateTime startTime = alertDataPageQueryDto.getStartTime() == null ? null : LocalDateTimeUtil.of(alertDataPageQueryDto.getStartTime());
        LocalDateTime endTime = alertDataPageQueryDto.getEndTime() == null ? null : LocalDateTimeUtil.of(alertDataPageQueryDto.getEndTime());

        Page<AlertDataVo> pageResult = alertDataMapper.adminPageQuery(alertDataPageQueryDto.getId(), alertDataPageQueryDto.getStatus(), alertDataPageQueryDto.getDeviceName(), userId, startTime, endTime);
        return PageBean.of(pageResult, AlertDataVo.class);
    }

    /**
     * 处理设备报警数据
     *
     * @param id                 报警数据id
     * @param alertDataHandleDto 处理报警数据请求模型
     */
    @Transactional
    @Override
    public void handleAlertData(Long id, AlertDataHandleDto alertDataHandleDto) {

        AlertData alertData = alertDataMapper.selectByPrimaryKey(id);

        //从当前线程中获取用户数据，更新报警数据
        Long userId = ThreadLocalUtil.get();
        User user = userMapper.selectByPrimaryKey(userId);

        alertData.setProcessingResult(alertDataHandleDto.getProcessingResult());
        alertData.setProcessingTime(alertDataHandleDto.getProcessingTime());
        alertData.setProcessorName(user.getRealName());
        alertData.setProcessorId(userId);

        alertDataMapper.handleAlertData(alertData);
    }

}
